Linux 内核的故事
1991 年 8 月 25 日,芬兰研究生 Linus Torvalds 告诉 Minix 新闻组,他正在开发他的新的免费操作系统,这将“只是一个爱好。”但在 29 年后,Linux 几乎统治了计算机世界。在 2020 年的 Linux 内核历史报告中,Linux 基金会讲述了从 Linux 内核发布的第一天到 2020 年 8 月 Linux 内核 5.8 发布的故事。虽然基金会以...
2024-01-10linux内核aio功能
我正在测试内核异步io函数(不是posixaio),并试图弄清楚它是如何工作的。下面的代码是一个完整的程序,其中我简单地将一个数组重复写入使用O_DIRECT打开的文件中。我在回调函数中收到一个错误“写错的字节期望1024得到0”(请参阅work_done()中的fprintf语句)。对于不熟悉内核aio的用户,以...
2024-01-10Linux内核驱动
寄存器与内存 寄存器与内存的区别在哪里呢?寄存器和RAM的主要不同在于寄存器操作有副作用(side effect或边际效果):读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。内存与IO在X86处理器中存在IO空间的概念,IO空间是相对内存...
2024-01-10Linux内核中的自旋锁
自旋锁不会引起睡眠,当一个进程在访问内核无法获取自旋锁时,会进入忙循环,一直等待下去。 实例:Pcilynx.c (\linux-2.6.30.4\drivers\ieee1394) 1 声明 struct ti_lynx { int id; /* se...
2024-01-10Linux内核如何测试?
Linux内核开发人员如何在提交代码后在本地测试他们的代码?他们是否使用某种单元测试,构建自动化?测试计划?回答:linux内核非常重视社区测试。通常,任何开发人员都会在提交之前测试他们自己的代码,并且经常会使用Linus的内核开发版本,或者与他们的工作相关的项目使用其他不稳定/开发树...
2024-01-10Linux 内核通用链表学习小结
描述在linux内核中封装了一个通用的双向链表库,这个通用的链表库有很好的扩展性和封装性,它给我们提供了一个固定的指针域结构体,我们在使用的时候,只需要在我们定义的数据域结构体中包含这个指针域结构体就可以了,具体的实现、链接并不需要我们关心,只要调用提供给我们的相关接口就...
2024-01-10钻进Linux内核看个究竟
Linux 内核,这个经常听见,却不不知道它具体是干嘛的东西,是不是觉得非常神秘?Linux 内核看不见摸不着,而对于这类东西,我们经常无从下手。本文就以浅显易懂的语言,带你钻进 Linux 内核,看它到底长啥样。内核是 Linux 操作系统的核心组件,它向上连接应用程序,向下直接与硬件打交道。其...
2024-01-10在Linux内核中使用浮点
我正在阅读Robert Love的“ Linux内核开发”,并且遇到了以下段落:当用户空间进程使用浮点指令时,内核将管理从整数到浮点模式的转换。内核使用浮点指令时必须执行的操作因体系结构而异,但是内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。与用户空间不同,内核不具有对浮点...
2024-01-10Linux内核参数共享内存
kernel.shmallThis parameter sets the total amount of shared memory pages that can be used system wide.kernel.shmmaxThis parameter defines the maximum size in bytes of a single shared memory segment that a Linux process can allocate in its virtual address s...
2024-01-10ARM64 Linux内核页表块映射
导读内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。以典型的4K页和48位虚拟地址为例,整个内核空间的虚拟地址分布如下:从ffff0...
2024-01-10Linux获得内核“锁定”功能
经过多年的无数次审查,讨论和代码重写,Linus Torvalds周六批准了Linux内核的一项新安全功能,称为“锁定”。这项新功能将作为LSM(Linux安全模块)发布在即将发布的Linux内核5.4分支中,该分支默认情况下处于关闭状态。由于存在破坏现有系统的风险,因此使用是可选的。工作方式这项新功能的主要功...
2024-01-10Linux 内核空间与用户空间实现与分析
本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。内核空间和用户空间对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护...
2024-01-10从Linux内核发送UDP数据包
即使已经存在一个类似的主题,我也注意到它可以追溯到两年前,因此我认为打开一个新主题更为合适。我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以便监视随机数生成器(/drivers/char/random.c)的行为。到目前为止,由于sock_create和sock_sendmsg函数,我已经设法监视了一些事情。您可以在此消息...
2024-01-10【linux】Linux 内核双链表的实现太精妙了
通过设计前驱和后继两个指针域,双链表可以从两个方向遍历。如果打乱前驱、后继的依赖关系,就可以构成"二叉树";如果再让首节点的前驱指向链表尾节点、尾节点的后继指向首节点(图中虚线部分),就构成了循环链表;如果设计更多的指针域,就可以构成各种复杂的树状数据结构。这是 Linux ...
2024-01-10Linux 系统优化的一些建议(内核优化)
关闭swap如果服务器上有运行数据库服务或消息中间件服务,请关闭交换分区echo "vm.swappiness = 0" >> /etc/sysctl.confsysctl -pOOM Killer一般我们的linux服务都是混部服务的,每个程序申请的物理内存都是共享的;例如物理内存只有1g,启动2个程序各申请1g是可以的,linux通过这种过度分配的方式来达到内存的...
2024-01-10【linux】linux 内核参数的实际作用的疑惑?
"tcp 内核接收和发送缓冲区"sysctl -x net.ipv4.tcp_mem -> net.ipv4.tcp_rmem = 4096 87380 6291456sysctl -x net.ipv4.tcp_rmem -> net.ipv4.tcp_wmem = 4096 16384 4194304--------------------------------------------------------------"本地测试"--------------------------...
2024-01-10漫画赏析:Linux内核到底长啥样
今天,我来为大家解读一幅来自 TurnOff.us 的漫画 “InSide The Linux Kernel” 。 TurnOff.us 是一个极客漫画网站,作者Daniel Stori 画了一些非常有趣的关于编程语言、Web、云计算、Linux 相关的漫画。今天解读的便是其中的一篇。在开始,我们先来看看这幅漫画的全貌!这幅漫画是以一个房子的侧方刨面图来绘...
2024-01-10如何在Linux上设置自动内核更新
向Linux内核应用安全更新是一个简单的过程,可以使用 apt ,yum或kexec之类的工具来完成。 但是,在管理成百上千个运行不同Linux发行版的服务器进行修补时,此方法可能具有挑战性且耗时。手动更新内核需要重新引导系统。 这会导致停机,这可能是个问题,因此通常计划在特定的时间间隔进行重启。 ...
2024-01-10Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。调优清单好了,在这里先列出调优清单。请记住,这里只是笔者在内网进行TCP...
2024-01-10在Linux内核中添加了新的网络协议
我知道在linux内核中,我们可以在传输层添加我们自己的协议,类似于TCP,UDP等。是否有任何钩子可以在网络层上注册类似于IP,ARP的新协议,可以将数据包传输到应用程序,以及如何在Linux内核中添加此协议?回答:要处理从用户空间到协议的通信,请使用内核套接字API注册协议。这使您可以从用户...
2024-01-10linux下用户程序同内核通信详解(netlink机制)
简介linux下用户程序同内核通信的方式一般有ioctl, proc文件系统,剩下一个就是Netlink套接字了。 这里先介绍下netlink。Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink...
2024-01-10Linux上TCP的几个内核参数调优顶
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。调优清单好了,在这里先列出调优清单。请记住,这里只是笔者在内网进行TC...
2024-01-10如何从命令行获取Linux中的CPU /内核数?
我有这个脚本,但是我不知道如何获取打印输出中的最后一个元素:cat /proc/cpuinfo | awk '/^processor/{print $3}'最后一个元素应该是CPU数量减1。回答:grep -c ^processor /proc/cpuinfo将计算以“处理器”开头的行数 /proc/cpuinfo对于具有超线程的系统,可以使用grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'应该...
2024-01-10在Linux内核哈希列表实现中使用双指针
我试图了解链表和哈希表的Linux内核实现。实现的链接在这里。我了解链表的实现。但是我对为什么在hlist(*pprev)中使用双指针感到困惑。hlist的链接在这里。我知道hlist用于实现哈希表,因为列表的头仅需要一个指针,并且可以节省空间。为什么不能使用单个指针(就像链接列表一样prev)来完成?...
2024-01-10Linux内核的LED设备驱动框架【转】
/*************************************************************************************本文为个人学习记录,如有错误,欢迎指正。*本文参考资料:* https://blog.csdn.net/qq_28992301/article/details/52410587* https://blog.csdn.net/hanp_linux/article/details/79037610*********...
2024-01-10